home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 February: Tool Chest / Dev.CD Feb 94.toast / Tool Chest / Development Platforms / MPW Related / MPW Interfaces / PInterfaces / TextUtils.p < prev    next >
Encoding:
Text File  |  1993-09-17  |  13.4 KB  |  347 lines  |  [TEXT/MPS ]

  1. {
  2.     File:        TextUtils.p
  3.  
  4.     Copyright:    © 1983-1993 by Apple Computer, Inc.
  5.                 All rights reserved.
  6.  
  7.     Version:    System 7.1 for ETO #11
  8.     Created:    Tuesday, March 30, 1993 18:00
  9.  
  10. }
  11.  
  12. {$IFC UNDEFINED UsingIncludes}
  13. {$SETC UsingIncludes := 0}
  14. {$ENDC}
  15.  
  16. {$IFC NOT UsingIncludes}
  17.  UNIT TextUtils;
  18.  INTERFACE
  19. {$ENDC}
  20.  
  21. {$IFC UNDEFINED UsingTextUtils}
  22. {$SETC UsingTextUtils := 1}
  23.  
  24. {$I+}
  25. {$SETC TextUtilsIncludes := UsingIncludes}
  26. {$SETC UsingIncludes := 1}
  27. {$IFC UNDEFINED UsingTypes}
  28. {$I $$Shell(PInterfaces)Types.p}
  29. {$ENDC}
  30. {$IFC UNDEFINED UsingScript}
  31. {$I $$Shell(PInterfaces)Script.p}
  32. {$ENDC}
  33. {$IFC UNDEFINED UsingOSUtils}
  34. {$I $$Shell(PInterfaces)OSUtils.p}
  35. {$ENDC}
  36. {$SETC UsingIncludes := TextUtilsIncludes}
  37.  
  38. CONST
  39.  
  40. { Constants for truncWhere argument in TruncString and TruncText }
  41.  
  42. truncEnd = 0;                                    { Truncate at end }
  43. truncMiddle = $4000;                            { Truncate in middle }
  44. smTruncEnd = 0;                                    { Truncate at end    obsolete }
  45. smTruncMiddle = $4000;                            { Truncate in middle     obsolete }
  46.  
  47. { Constants for TruncString and TruncText results }
  48.  
  49. notTruncated = 0;                                { No truncation was necessary }
  50. truncated = 1;                                    { Truncation performed }
  51. truncErr = -1;                                    { General error }
  52. smNotTruncated = 0;                                { No truncation was necessary obsolete }
  53. smTruncated = 1;                                { Truncation performed    obsolete }
  54. smTruncErr = -1;                                { General error      obsolete }
  55.  
  56. fVNumber = 0;                                    {first version of NumFormatString}
  57.  
  58. { String2Date status values }
  59.  
  60. fatalDateTime = $8000;                            {String2Date and String2Time mask to a fatal error}
  61. longDateFound = 1;                                {String2Date mask to long date found}
  62. leftOverChars = 2;                                {String2Date & Time mask to warn of left over characters}
  63. sepNotIntlSep = 4;                                {String2Date & Time mask to warn of non-standard separators}
  64. fieldOrderNotIntl = 8;                            {String2Date & Time mask to warn of non-standard field order}
  65. extraneousStrings = 16;                            {String2Date & Time mask to warn of unparsable strings in text}
  66. tooManySeps = 32;                                {String2Date & Time mask to warn of too many separators}
  67. sepNotConsistent = 64;                            {String2Date & Time mask to warn of inconsistent separators}
  68. tokenErr = $8100;                                {String2Date & Time mask for 'tokenizer err encountered'}
  69. cantReadUtilities = $8200;
  70. dateTimeNotFound = $8400;
  71. dateTimeInvalid = $8800;
  72.  
  73.  
  74. { Special language code values for Language Order }
  75.  
  76. systemCurLang = -2;                                { current (itlbLang) lang for system script }
  77. systemDefLang = -3;                                { default (table) lang for system script }
  78. currentCurLang = -4;                            { current (itlbLang) lang for current script }
  79. currentDefLang = -5;                            { default lang for current script }
  80. scriptCurLang = -6;                                { current (itlbLang) lang for specified script }
  81. scriptDefLang = -7;                                { default language for a specified script }
  82. iuSystemCurLang = -2;                            { <obsolete> current (itlbLang) lang for system script }
  83. iuSystemDefLang = -3;                            { <obsolete> default (table) lang for system script }
  84. iuCurrentCurLang = -4;                            { <obsolete> current (itlbLang) lang for current script }
  85. iuCurrentDefLang = -5;                            { <obsolete> default lang for current script }
  86. iuScriptCurLang = -6;                            { <obsolete> current (itlbLang) lang for specified script }
  87. iuScriptDefLang = -7;                            { <obsolete> default language for a specified script }
  88.  
  89.  
  90. TYPE
  91. StyledLineBreakCode = (smBreakWord,smBreakChar,smBreakOverflow);
  92.  
  93. FormatClass = (fPositive,fNegative,fZero);
  94.  
  95. FormatResultType = (fFormatOK,fBestGuess,fOutOfSynch,fSpuriousChars,fMissingDelimiter,
  96.  fExtraDecimal,fMissingLiteral,fExtraExp,fFormatOverflow,fFormStrIsNAN,
  97.  fBadPartsTable,fExtraPercent,fExtraSeparator,fEmptyFormatString);
  98.  
  99.  
  100. NumFormatString = PACKED RECORD
  101.  fLength: Byte;
  102.  fVersion: Byte;
  103.  data: PACKED ARRAY [0..253] OF SignedByte;        {private data}
  104.  END;
  105.  
  106.  
  107. NumFormatStringRec = NumFormatString;
  108.  
  109. FVector = RECORD
  110.  start: INTEGER;
  111.  length: INTEGER;
  112.  END;
  113.  
  114.  
  115. TripleInt = ARRAY [0..2] OF FVector;            { index by [fPositive..fZero] }
  116.  
  117. ScriptRunStatus = RECORD
  118.  script: SignedByte;
  119.  variant: SignedByte;
  120.  END;
  121.  
  122.  
  123. { New types for System 7.0:                
  124.   type for truncWhere parameter in new TruncString, TruncText }
  125.  
  126. TruncCode = INTEGER;
  127.  
  128. DateForm = (shortDate,longDate,abbrevDate);
  129.  
  130.  
  131. StringToDateStatus = INTEGER;
  132. String2DateStatus = INTEGER;
  133.  
  134. DateCachePtr = ^DateCacheRecord;
  135. DateCacheRecord = PACKED RECORD
  136.  hidden: ARRAY [0..255] OF INTEGER;                {only for temporary use}
  137.  END;
  138.  
  139. BreakTablePtr = ^BreakTable;
  140. BreakTable = RECORD
  141.  charTypes: ARRAY [0..255] OF SignedByte;
  142.  tripleLength: INTEGER;
  143.  triples: ARRAY [0..0] OF INTEGER;
  144.  END;
  145.  
  146. NBreakTablePtr = ^NBreakTable;
  147. NBreakTable = RECORD
  148.  flags1: SignedByte;
  149.  flags2: SignedByte;
  150.  version: INTEGER;
  151.  classTableOff: INTEGER;
  152.  auxCTableOff: INTEGER;
  153.  backwdTableOff: INTEGER;
  154.  forwdTableOff: INTEGER;
  155.  doBackup: INTEGER;
  156.  reserved: INTEGER;
  157.  charTypes: ARRAY [0..255] OF SignedByte;
  158.  tables: ARRAY [0..0] OF INTEGER;
  159.  END;
  160.  
  161.  
  162. PROCEDURE IUDateString(dateTime: LONGINT;longFlag: DateForm;VAR result: Str255);
  163.  INLINE $4267,$A9ED;
  164. PROCEDURE DateString(dateTime: LONGINT;longFlag: DateForm;VAR result: Str255;
  165.  intlHandle: Handle);
  166.  INLINE $3F3C,$000E,$A9ED;
  167. PROCEDURE IUDatePString(dateTime: LONGINT;longFlag: DateForm;VAR result: Str255;
  168.  intlHandle: Handle);
  169.  INLINE $3F3C,$000E,$A9ED;
  170. PROCEDURE IUTimeString(dateTime: LONGINT;wantSeconds: BOOLEAN;VAR result: Str255);
  171.  INLINE $3F3C,$0002,$A9ED;
  172. PROCEDURE TimeString(dateTime: LONGINT;wantSeconds: BOOLEAN;VAR result: Str255;
  173.  intlHandle: Handle);
  174.  INLINE $3F3C,$0010,$A9ED;
  175. PROCEDURE IUTimePString(dateTime: LONGINT;wantSeconds: BOOLEAN;VAR result: Str255;
  176.  intlHandle: Handle);
  177.  INLINE $3F3C,$0010,$A9ED;
  178. PROCEDURE LongDateString(VAR dateTime: LongDateTime;longFlag: DateForm;
  179.  VAR result: Str255;intlHandle: Handle);
  180.  INLINE $3F3C,$0014,$A9ED;
  181. PROCEDURE IULDateString(VAR dateTime: LongDateTime;longFlag: DateForm;VAR result: Str255;
  182.  intlHandle: Handle);
  183.  INLINE $3F3C,$0014,$A9ED;
  184. PROCEDURE LongTimeString(VAR dateTime: LongDateTime;wantSeconds: BOOLEAN;
  185.  VAR result: Str255;intlHandle: Handle);
  186.  INLINE $3F3C,$0016,$A9ED;
  187. PROCEDURE IULTimeString(VAR dateTime: LongDateTime;wantSeconds: BOOLEAN;
  188.  VAR result: Str255;intlHandle: Handle);
  189.  INLINE $3F3C,$0016,$A9ED;
  190. FUNCTION InitDateCache(theCache: DateCachePtr): OSErr;
  191.  INLINE $2F3C,$8204,$FFF8,$A8B5;
  192. FUNCTION StringToDate(textPtr: Ptr;textLen: LONGINT;theCache: DateCachePtr;
  193.  VAR lengthUsed: LONGINT;VAR dateTime: LongDateRec): StringToDateStatus;
  194.  INLINE $2F3C,$8214,$FFF6,$A8B5;
  195. FUNCTION String2Date(textPtr: Ptr;textLen: LONGINT;theCache: DateCachePtr;
  196.  VAR lengthUsed: LONGINT;VAR dateTime: LongDateRec): String2DateStatus;
  197.  INLINE $2F3C,$8214,$FFF6,$A8B5;
  198. FUNCTION StringToTime(textPtr: Ptr;textLen: LONGINT;theCache: DateCachePtr;
  199.  VAR lengthUsed: LONGINT;VAR dateTime: LongDateRec): StringToDateStatus;
  200.  INLINE $2F3C,$8214,$FFF4,$A8B5;
  201. FUNCTION String2Time(textPtr: Ptr;textLen: LONGINT;theCache: DateCachePtr;
  202.  VAR lengthUsed: LONGINT;VAR dateTime: LongDateRec): String2DateStatus;
  203.  INLINE $2F3C,$8214,$FFF4,$A8B5;
  204.  
  205. FUNCTION EqualString(str1: Str255;str2: Str255;caseSens: BOOLEAN;diacSens: BOOLEAN): BOOLEAN;
  206. PROCEDURE UpperString(VAR theString: Str255;diacSens: BOOLEAN);
  207. PROCEDURE UprString(VAR theString: Str255;diacSens: BOOLEAN);
  208. FUNCTION RelString(str1: Str255;str2: Str255;caseSens: BOOLEAN;diacSens: BOOLEAN): INTEGER;
  209.  
  210. FUNCTION GetString(stringID: INTEGER): StringHandle;
  211.  INLINE $A9BA;
  212. FUNCTION Munger(h: Handle;offset: LONGINT;ptr1: Ptr;len1: LONGINT;ptr2: Ptr;
  213.  len2: LONGINT): LONGINT;
  214.  INLINE $A9E0;
  215. PROCEDURE SetString(theString: StringHandle;strNew: Str255);
  216.  INLINE $A907;
  217. FUNCTION NewString(theString: Str255): StringHandle;
  218.  INLINE $A906;
  219. PROCEDURE GetIndString(VAR theString: Str255;strListID: INTEGER;index: INTEGER);
  220.  
  221.  
  222. { The next four calls will be obsolete.  Use the similar Pstring call and pass a NIL handle. }
  223. FUNCTION IUMagString(aPtr: Ptr;bPtr: Ptr;aLen: INTEGER;bLen: INTEGER): INTEGER;
  224.  INLINE $3F3C,$000A,$A9ED;
  225. FUNCTION IUMagIDString(aPtr: Ptr;bPtr: Ptr;aLen: INTEGER;bLen: INTEGER): INTEGER;
  226.  INLINE $3F3C,$000C,$A9ED;
  227. FUNCTION IUCompString(aStr: Str255;bStr: Str255): INTEGER;
  228. FUNCTION IUEqualString(aStr: Str255;bStr: Str255): INTEGER;
  229.  
  230. PROCEDURE StringToNum(theString: Str255;VAR theNum: LONGINT);
  231. PROCEDURE NumToString(theNum: LONGINT;VAR theString: Str255);
  232.  
  233. FUNCTION CompareText(aPtr: Ptr;bPtr: Ptr;aLen: INTEGER;bLen: INTEGER;itl2Handle: Handle): INTEGER;
  234.  INLINE $3F3C,$001A,$A9ED;
  235. FUNCTION IUMagPString(aPtr: Ptr;bPtr: Ptr;aLen: INTEGER;bLen: INTEGER;itl2Handle: Handle): INTEGER;
  236.  INLINE $3F3C,$001A,$A9ED;
  237. FUNCTION IdenticalText(aPtr: Ptr;bPtr: Ptr;aLen: INTEGER;bLen: INTEGER;
  238.  itl2Handle: Handle): INTEGER;
  239.  INLINE $3F3C,$001C,$A9ED;
  240. FUNCTION IUMagIDPString(aPtr: Ptr;bPtr: Ptr;aLen: INTEGER;bLen: INTEGER;
  241.  itl2Handle: Handle): INTEGER;
  242.  INLINE $3F3C,$001C,$A9ED;
  243. FUNCTION CompareString(aStr: Str255;bStr: Str255;itl2Handle: Handle): INTEGER;
  244. FUNCTION IUCompPString(aStr: Str255;bStr: Str255;itl2Handle: Handle): INTEGER;
  245. FUNCTION IdenticalString(aStr: Str255;bStr: Str255;itl2Handle: Handle): INTEGER;
  246. FUNCTION IUEqualPString(aStr: Str255;bStr: Str255;itl2Handle: Handle): INTEGER;
  247. FUNCTION ScriptOrder(script1: ScriptCode;script2: ScriptCode): INTEGER;
  248.  INLINE $3F3C,$001E,$A9ED;
  249. FUNCTION IUScriptOrder(script1: ScriptCode;script2: ScriptCode): INTEGER;
  250.  INLINE $3F3C,$001E,$A9ED;
  251. FUNCTION LanguageOrder(language1: LangCode;language2: LangCode): INTEGER;
  252.  INLINE $3F3C,$0020,$A9ED;
  253. FUNCTION IULangOrder(language1: LangCode;language2: LangCode): INTEGER;
  254.  INLINE $3F3C,$0020,$A9ED;
  255. FUNCTION TextOrder(aPtr: Ptr;bPtr: Ptr;aLen: INTEGER;bLen: INTEGER;aScript: ScriptCode;
  256.  bScript: ScriptCode;aLang: LangCode;bLang: LangCode): INTEGER;
  257.  INLINE $3F3C,$0022,$A9ED;
  258. FUNCTION IUTextOrder(aPtr: Ptr;bPtr: Ptr;aLen: INTEGER;bLen: INTEGER;aScript: ScriptCode;
  259.  bScript: ScriptCode;aLang: LangCode;bLang: LangCode): INTEGER;
  260.  INLINE $3F3C,$0022,$A9ED;
  261. FUNCTION StringOrder(aStr: Str255;bStr: Str255;aScript: ScriptCode;bScript: ScriptCode;
  262.  aLang: LangCode;bLang: LangCode): INTEGER;
  263. FUNCTION IUStringOrder(aStr: Str255;bStr: Str255;aScript: ScriptCode;bScript: ScriptCode;
  264.  aLang: LangCode;bLang: LangCode): INTEGER;
  265.  
  266. PROCEDURE FindWord(textPtr: Ptr;textLength: INTEGER;offset: INTEGER;leadingEdge: BOOLEAN;
  267.  breaks: BreakTablePtr;VAR offsets: OffsetTable);
  268.  INLINE $2F3C,$8012,$001A,$A8B5;
  269.  
  270. PROCEDURE FindWordBreaks(textPtr: Ptr;textLength: INTEGER;offset: INTEGER;
  271.  leadingEdge: BOOLEAN;breaks: BreakTablePtr;VAR offsets: OffsetTable;script: ScriptCode);
  272.  INLINE $2F3C,$C012,$001A,$A8B5;
  273.  
  274. PROCEDURE UprText(textPtr: Ptr;len: INTEGER);
  275.  INLINE $301F,$205F,$A054;
  276. PROCEDURE LwrText(textPtr: Ptr;len: INTEGER);
  277.  INLINE $301F,$205F,$A056;
  278.  
  279.  
  280. {   New for 7.0  
  281.  }
  282. PROCEDURE LowerText(textPtr: Ptr;len: INTEGER);
  283.  INLINE $301F,$205F,$A056;
  284. PROCEDURE StripText(textPtr: Ptr;len: INTEGER);
  285.  INLINE $301F,$205F,$A256;
  286. PROCEDURE UpperText(textPtr: Ptr;len: INTEGER);
  287.  INLINE $301F,$205F,$A456;
  288. PROCEDURE StripUpperText(textPtr: Ptr;len: INTEGER);
  289.  INLINE $301F,$205F,$A656;
  290.  
  291. FUNCTION StyledLineBreak(textPtr: Ptr;textLen: LONGINT;textStart: LONGINT;
  292.  textEnd: LONGINT;flags: LONGINT;VAR textWidth: Fixed;VAR textOffset: LONGINT): StyledLineBreakCode;
  293.  INLINE $2F3C,$821C,$FFFE,$A8B5;
  294.  
  295. FUNCTION StringToFormatRec(inString: Str255;partsTable: NumberParts;VAR outString: NumFormatString): FormatStatus;
  296.  INLINE $2F3C,$820C,$FFEC,$A8B5;
  297. FUNCTION Str2Format(inString: Str255;partsTable: NumberParts;VAR outString: NumFormatString): FormatStatus;
  298.  INLINE $2F3C,$820C,$FFEC,$A8B5;
  299. FUNCTION FormatRecToString(myCanonical: NumFormatString;partsTable: NumberParts;
  300.  VAR outString: Str255;VAR positions: TripleInt): FormatStatus;
  301.  INLINE $2F3C,$8210,$FFEA,$A8B5;
  302. FUNCTION Format2Str(myCanonical: NumFormatString;partsTable: NumberParts;
  303.  VAR outString: Str255;VAR positions: TripleInt): FormatStatus;
  304.  INLINE $2F3C,$8210,$FFEA,$A8B5;
  305. FUNCTION ExtendedToString(x: Extended80;myCanonical: NumFormatString;partsTable: NumberParts;
  306.  VAR outString: Str255): FormatStatus;
  307.  INLINE $2F3C,$8210,$FFE8,$A8B5;
  308. FUNCTION FormatX2Str(x: Extended80;myCanonical: NumFormatString;partsTable: NumberParts;
  309.  VAR outString: Str255): FormatStatus;
  310.  INLINE $2F3C,$8210,$FFE8,$A8B5;
  311. FUNCTION StringToExtended(source: Str255;myCanonical: NumFormatString;partsTable: NumberParts;
  312.  VAR x: Extended80): FormatStatus;
  313.  INLINE $2F3C,$8210,$FFE6,$A8B5;
  314. FUNCTION FormatStr2X(source: Str255;myCanonical: NumFormatString;partsTable: NumberParts;
  315.  VAR x: Extended80): FormatStatus;
  316.  INLINE $2F3C,$8210,$FFE6,$A8B5;
  317.  
  318. FUNCTION FindScriptRun(textPtr: Ptr;textLen: LONGINT;VAR lenUsed: LONGINT): ScriptRunStatus;
  319.  INLINE $2F3C,$820C,$0026,$A8B5;
  320.  
  321. PROCEDURE NFindWord(textPtr: Ptr;textLength: INTEGER;offset: INTEGER;leadingEdge: BOOLEAN;
  322.  nbreaks: NBreakTablePtr;VAR offsets: OffsetTable);
  323.  INLINE $2F3C,$8012,$FFE2,$A8B5;
  324. FUNCTION TruncString(width: INTEGER;VAR theString: Str255;truncWhere: TruncCode): INTEGER;
  325.  INLINE $2F3C,$8208,$FFE0,$A8B5;
  326. FUNCTION TruncText(width: INTEGER;textPtr: Ptr;VAR length: INTEGER;truncWhere: TruncCode): INTEGER;
  327.  INLINE $2F3C,$820C,$FFDE,$A8B5;
  328. FUNCTION ReplaceText(baseText: Handle;substitutionText: Handle;key: Str15): INTEGER;
  329.  INLINE $2F3C,$820C,$FFDC,$A8B5;
  330.  
  331. PROCEDURE LowercaseText(textPtr: Ptr;len: INTEGER;script: ScriptCode);
  332.  INLINE $3F3C,$0000,$2F3C,$800A,$FFB6,$A8B5;
  333. PROCEDURE StripDiacritics(textPtr: Ptr;len: INTEGER;script: ScriptCode);
  334.  INLINE $3F3C,$0200,$2F3C,$800A,$FFB6,$A8B5;
  335. PROCEDURE UppercaseText(textPtr: Ptr;len: INTEGER;script: ScriptCode);
  336.  INLINE $3F3C,$0400,$2F3C,$800A,$FFB6,$A8B5;
  337. PROCEDURE UppercaseStripDiacritics(textPtr: Ptr;len: INTEGER;script: ScriptCode);
  338.  INLINE $3F3C,$0600,$2F3C,$800A,$FFB6,$A8B5;
  339.  
  340.  
  341. {$ENDC} { UsingTextUtils }
  342.  
  343. {$IFC NOT UsingIncludes}
  344.  END.
  345. {$ENDC}
  346.  
  347.